package com.dp1.pucp.Seguridad.Controlador;

import com.dp1.pucp.Seguridad.DAO.*;
import com.dp1.pucp.Seguridad.Vista.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import com.dp1.pucp.Modelo.Clases.Perfil;
import com.dp1.pucp.Util.Validaciones;

public class MantPerfilControlador {

    private PerfilDAO m;
    private MantPerfilGUI2 mantPerfilGUI;
    private ArrayList<Perfil> lstPerfil;
    private ArrayList<String> lstEstado;
    private final static int ESTADO_INACTIVO = 2;

    public MantPerfilControlador(PerfilDAO dao, MantPerfilGUI2 view) {

        this.m = dao;
        this.mantPerfilGUI = view;

        this.mantPerfilGUI.addNuevoListener(new crearPerfilListener());
        this.mantPerfilGUI.addBuscarListener(new listarPerfiles());
        this.mantPerfilGUI.addEditarListener(new editarPerfilListener());
        this.mantPerfilGUI.addLimpiarListener(new limpiarListener());
        this.mantPerfilGUI.addELiminarListener(new eliminarListener());
        llenarEstadoCombo();

    }

    class eliminarListener implements ActionListener {

        @Override
        public void actionPerformed(ActionEvent e) {
            int sel = mantPerfilGUI.getFilaSel();
            if (sel != -1) {
                if (Validaciones.solicitarConfirmacionVal("¿Desea eliminar el perfil:\n "
                        + lstPerfil.get(sel).getNombre() + "?") == 0) {
                    Perfil u = lstPerfil.get(sel);
                    u.setEstado(ESTADO_INACTIVO);
                    m.guardarPerfil(u);
                    Validaciones.mostrarMensajeAvisoVal("Se eliminó exitosamente el perfil:\n "
                            + lstPerfil.get(sel).getNombre());
                }
            } else {
                Validaciones.mostrarMensajeErrorVal("Debe seleccionar un empleado");
            }
        }
    }

    private void llenarEstadoCombo() {
        lstEstado = m.listarEstado();
        mantPerfilGUI.llenaComboEstado(lstEstado);
    }

    public void listarResultados() {
        lstPerfil = m.listarPerfil();
        lstPerfil = realizarFiltro(lstPerfil);
        mantPerfilGUI.llenaGrilla(lstPerfil);
    }

    class listarPerfiles implements ActionListener {

        public listarPerfiles() {
        }

        @Override
        public void actionPerformed(ActionEvent e) {
            listarResultados();
        }
    }

    class crearPerfilListener implements ActionListener {

        @Override
        public void actionPerformed(ActionEvent e) {
            PerfilGUI p = new PerfilGUI(mantPerfilGUI.getPadre(), true);
            PerfilControlador c = new PerfilControlador(m, p, null);
            p.setVisible(true);
        }
    }

    class editarPerfilListener implements ActionListener {

        @Override
        public void actionPerformed(ActionEvent e) {
            int indice = mantPerfilGUI.getFilaSel();

            if (indice != -1) {
                PerfilGUI perfilGUI = new PerfilGUI(mantPerfilGUI.getPadre(), true);
                Perfil perfil = lstPerfil.get(indice);
                PerfilControlador c = new PerfilControlador(m, perfilGUI, perfil);
                perfilGUI.setVisible(true);

            } else {
                Validaciones.mostrarMensajeAvisoVal("Debe seleccionar un perfil para editar.");
            }
        }
    }

    class limpiarListener implements ActionListener {

        @Override
        public void actionPerformed(ActionEvent e) {
            mantPerfilGUI.LimpiarDatos();
        }
    }

    public ArrayList<Perfil> realizarFiltro(ArrayList<Perfil> lista) {
        ArrayList<Perfil> listPerfil = new ArrayList<>();
        ArrayList<Perfil> tempListPerfil;

        tempListPerfil = lista;
        if (mantPerfilGUI.getEstado() != 0) {
            for (int i = 0; i < tempListPerfil.size(); i++) {
                if (tempListPerfil.get(i).getEstado() == mantPerfilGUI.getEstado()) {
                    listPerfil.add(tempListPerfil.get(i));
                }
            }
        } else {
            listPerfil = tempListPerfil;
        }


        tempListPerfil = listPerfil;
        listPerfil = new ArrayList<>();

        if (!mantPerfilGUI.getNombre().equalsIgnoreCase("")) {

            for (int i = 0; i < tempListPerfil.size(); i++) {
                if (tempListPerfil.get(i).getNombre().toUpperCase().contains(mantPerfilGUI.getNombre().toUpperCase())) {
                    listPerfil.add(tempListPerfil.get(i));
                }
            }
        } else {
            listPerfil = tempListPerfil;
        }
        return listPerfil;
    }
}
